#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
腾讯企业邮箱连接替代方案测试
使用不同的方法测试邮箱连接
"""

import smtplib
import ssl
from datetime import datetime
import sys

# 导入邮箱配置
try:
    from email_config import EMAIL_CONFIG
except ImportError:
    print("未找到配置文件 email_config.py，请创建该文件")
    sys.exit(1)

def test_smtp_connection():
    """测试SMTP连接（作为IMAP连接的替代验证）"""
    # 从配置文件获取邮箱信息
    USERNAME = EMAIL_CONFIG.get('username', '')
    PASSWORD = EMAIL_CONFIG.get('password', '')
    SMTP_SERVER = EMAIL_CONFIG.get('smtp_server', 'smtp.exmail.qq.com')
    SMTP_PORT = EMAIL_CONFIG.get('smtp_port', 465)
    
    if not USERNAME or not PASSWORD:
        print("请在 email_config.py 文件中配置用户名和密码")
        sys.exit(1)
    
    print("=" * 60)
    print("腾讯企业邮箱SMTP连接测试（替代方案）")
    print("=" * 60)
    
    print(f"配置信息:")
    print(f"  用户名: {USERNAME}")
    print(f"  SMTP服务器: {SMTP_SERVER}")
    print(f"  SMTP端口: {SMTP_PORT}")
    print(f"  当前时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print()
    
    try:
        print("1. 测试SMTP SSL连接...")
        # 创建SSL上下文
        context = ssl.create_default_context()
        
        # 连接SMTP服务器
        print(f"  正在连接到 {SMTP_SERVER}:{SMTP_PORT}...")
        server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT, context=context)
        print("  ✓ SMTP服务器连接成功")
        
        # 启用调试模式
        server.set_debuglevel(1)
        
        # 登录
        print("\n2. 尝试登录...")
        print("  正在登录...")
        server.login(USERNAME, PASSWORD)
        print("  ✓ SMTP登录成功")
        
        # 获取服务器信息
        print("\n3. 获取服务器信息...")
        try:
            # 获取服务器信息
            ehlo = server.ehlo()
            print(f"  EHLO响应: {ehlo}")
        except Exception as e:
            print(f"  获取服务器信息失败: {e}")
        
        # 关闭连接
        print("\n4. 关闭连接...")
        server.quit()
        print("  ✓ SMTP连接已关闭")
        
        print("\n" + "=" * 60)
        print("SMTP测试完成！如果此测试成功但IMAP测试失败，说明：")
        print("1. 邮箱账号和授权码是正确的")
        print("2. 网络连接正常")
        print("3. 问题可能出在IMAP服务配置上")
        print("=" * 60)
        
    except smtplib.SMTPAuthenticationError as e:
        print(f"\nSMTP认证失败: {e}")
        print("\n可能的原因:")
        print("1. 用户名或授权码不正确")
        print("2. 账户被限制登录")
        print("3. 登录频率限制")
    except smtplib.SMTPException as e:
        print(f"\nSMTP错误: {e}")
    except Exception as e:
        print(f"\n发生未知错误: {e}")

def check_config_file():
    """检查配置文件"""
    print("检查配置文件...")
    
    USERNAME = EMAIL_CONFIG.get('username', '')
    PASSWORD = EMAIL_CONFIG.get('password', '')
    IMAP_SERVER = EMAIL_CONFIG.get('imap_server', 'imap.exmail.qq.com')
    IMAP_PORT = EMAIL_CONFIG.get('imap_port', 993)
    
    print(f"  用户名: {'已设置' if USERNAME else '未设置'}")
    print(f"  密码: {'已设置' if PASSWORD else '未设置'}")
    print(f"  IMAP服务器: {IMAP_SERVER}")
    print(f"  IMAP端口: {IMAP_PORT}")
    
    if not USERNAME:
        print("  ✗ 错误: 用户名未设置")
    if not PASSWORD:
        print("  ✗ 错误: 密码未设置")
    if USERNAME and PASSWORD:
        print("  ✓ 配置文件基本信息完整")

if __name__ == "__main__":
    print("腾讯企业邮箱连接问题诊断工具")
    print("=" * 60)
    
    # 检查配置文件
    check_config_file()
    
    print("\n" + "=" * 60)
    
    # 询问用户是否要测试SMTP连接
    choice = input("\n是否要测试SMTP连接作为替代验证？(y/N): ")
    if choice.lower() == 'y':
        test_smtp_connection()
    else:
        print("跳过SMTP测试")